<?php

	try {

		$includeModels = array('BaseModel.class','Operacao.class');
		include('../../model/BaseModel.class.php');
		include('../../model/Operacao.class.php');
					
		$submitUrl = NULL;
		$info = NULL;
		
		$auth = array(
						array('action'=> 'Excluir', 'operacao'=>Operacao::CONTRATO_CADASTRAR_VAGAS),
						array('action'=> 'Salvar', 'operacao'=>Operacao::CONTRATO_CADASTRAR_VAGAS)												
					 );
		
	    require_once '../../controller/controller.inc.php';
		
	    $operacoes = array();
		$operacoes[0] = Operacao::CONTRATO_CADASTRAR_VAGAS;
		$operacoes[1] = Operacao::CONTRATO_VISUALIZAR_VAGAS;
		
		//$usuario->isAuthorizedViewOperacao( $operacoes );
		FluxoContrato::isVisible($operacoes);
		
		//Botao Excluir Aditivo
		$flagExcluir = TRUE;
		
		# Classes para indicar a aba ativa
		$classeContratos = '';
		$classeVagas = 'class="ativa"';
		$classeLotacoes = '';
		$classeSalarios = '';
		$classeVagasLotacoes = '';
		$classeAditivos = '';
		$classeArquivos = '';
	    
		$contratoid =  (isset ( $_GET['contratoid'])) ? $_GET['contratoid'] : null;
		$objeto = new Vaga();
		
		$contrato = new Contrato( $contratoid );
		 
		if (FluxoContrato::isEditable('vagas', $contrato)) {
			$readOnly = '';
		}
		else {
			$readOnly = 'disabled="disabled"';
		}

		# Autorização
	    if (!$usuario->isContratoPermitido($contratoid)) {
	    	$contratoid = NULL;
	    	$contrato = new Contrato();
	    	throw new Exception('Voce não tem autorizacao para acessar esta pagina.');	    		
	    }
	    
	    $info = NULL;
	    
	    // mensagens motivos aditivo
	    $motivos = array(MotivoAditivo::MOTIVO_QUANTIDADE);
	    if ($contrato->isAditivo() AND !$contrato->hasMotivosAditivo($motivos)) {
	        $info = 'Para alterar vagas desse aditivo, seus motivos devem conter o
	           item quantidade';
	    }
		
	    require( '../../controller/contratos/helper_situacao.php' );
	    
	    if (isset ($_POST["btnAcao"]))
	    {
	        $message = '';
	        $form = $_POST["btnAcao"];
	        switch($form)
	        {
	            case "Salvar":
	                
	            	if ( $contrato->isBloqueado() == TRUE ){
	            		throw new Exception( TMensagens::getContratoBloqueado() );
	            	}
	            	
	            	$qtde = $_POST["txtQuantidade"];
	                
	            	unset( $_POST['txtQuantidade'] );
	            	
	            	try {
	            		
	            		pg_query(conexao::Conectar(), "begin");
	            		
	            		for ($l = 0 ; $l < $qtde ; $l++) {
			                $objeto = new Vaga();
			                $objeto->statusid = Status::Vaga_AContratar;
			                $objeto->ativa = 'f';
			                TUtils::preencherObjeto( $objeto, $_POST );
			                $objeto->contratoid = $contratoid;
		                    $objeto->salvar();
		                }
		                
	            		pg_query(conexao::Conectar(), "commit");
	            		
	            	} catch ( exception $e ){
	            		pg_query(conexao::Conectar(), "rollback");
                		$erro = $e->getMessage();
	            	}
		            	
	            	$message = 'insercao';
	                break;
	                
	            case 'Excluir':
	            	
	            	if ( $contrato->isBloqueado() == TRUE )
	            		throw new Exception( TMensagens::getContratoBloqueado() );
	            	
					if ( !isset( $_POST['chkRegistro'] ) )
						throw new Exception( TMensagens::getNenhumItemSelecionado() );

					if ( count($_POST['chkRegistro']) > 1 )
							throw new Exception("Por favor, selecione apenas um cargo.");

							
					$vaga = new Vaga();
					$vaga->cargoid = $_POST['chkRegistro'];
					$vaga->contratoid = $contratoid;
					// total de cargos de um tipo em um determinado contrato
					$total = $vaga->getTotalPorCargoContrato(); 
					
					// se usuário não informar quantidade,
					// sistema exclui quantidade total
					$qtd = (isset($_POST['txtQuantidade']) AND $_POST['txtQuantidade'] > 0) ? $_POST['txtQuantidade'] : $total;
					
					$sql = "SELECT * FROM " . Vaga::tablename . " 
							WHERE 
	            				contratoid = " . pg_escape_string($contratoid) . " AND 
	            				cargoid = " . $_POST['chkRegistro']. " AND 
	            				ativa IS FALSE AND 
	            				lotacaoid IS NULL 
	            			LIMIT $qtd";					
										
					$result = TSqlSelect::customSelect($sql);
                    
					// quantidade que pode ser excluída
					$qtdEncontrada = pg_num_rows($result);
					
					if ($qtdEncontrada == $qtd) {

	            		$vagas = pg_fetch_all($result);
	            		
	            		$ids = array();
	            		foreach ($vagas as $v) {
	            			$ids[] = $v['vagaid'];
	            		}
	            		
	            		$objeto->excluirGrupo($ids);
	            	}
	            	else {
	            	    $qtdOcupada = $total - $qtdEncontrada;
	            		if ($contrato->isAditivo()) {
	            		    $flagExcluir = TRUE;
	            		    throw new Exception('Não é possível excluir esta quantidade
	            		        de vagas, pois existem ' . $qtdOcupada . ' vagas ativas.
	            		        ');
	            		}
	            		throw new Exception('Não é possível excluir esta quantidade de
	            		    vagas, pois existem ' . $qtdOcupada . ' vagas ativas.');
		            }

		            $message = 'exclusao';
		            
					break;
                
				/*
				case "Excluir Aditivo":                
                    header( 'Location: ../contratos/pesquisar.php?method=excluir&id=' . $_GET['contratoid']);
                    break; */
	        }
	        
	        header('Location: cadastrar.php?message=' . $message . '&contratoid=' . $contrato->contratoid);
	        
	    }    
	    
	    $submitUrl = basename(__FILE__) . '?contratoid=' . $_GET['contratoid'];
    
	}
	catch (exception $e) {		
		$erro = $e->getMessage();		
	}
	
	function is_authorized ($operacao) {
		global $contrato, $usuario, $pfcid;
		return $contrato->isAuthorized($operacao);
	}
?>
